package musica;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.Element;

/**
 * 
 * @author Mauro
 *
 */
public class Partitura {
	private Duracion tiempoDeCancion;
	private List<Compas> compaces;

	
	public Partitura (Duracion tiempo){
		this.tiempoDeCancion = tiempo;
		this.compaces = new ArrayList<Compas>(0);
	}
	
	
	/**
	 * Ensures that this collection contains the specified element 
	 *
	 * @param element whose presence in this collection is to be ensured.
	 * @see	java.util.Collection#add(Object)
	 *
	 */
	public void agregarCompas(Compas unCompas){
		compaces.add(unCompas);
	}
	
	/**
	 * Getter del atributo <tt>compaces</tt>
	 *
	 * @return Devuelve los compaces de la partitura.
	 * 
	 */
	
	public List<Compas> getCompaces(){
		return compaces;
	}


	
	/**
	 * iterador de la lista de Compaces de la Partitura
	 * @return Un iterador de la lista de compaces
	 */
	public Iterator compacesIterator(){
		return compaces.iterator();
	}
	
	public boolean partituraVacia(){
		return compaces.isEmpty();
	}


	/**
	 * Carga de la partitura desde el archivo XML
	 * 
	 * @param element
	 * @param duracion
	 * @return una nueva instancia de Partitura con los datos del archivo XML
	 */
	public static Partitura cargarDesdeXML(Element element, Duracion duracion) {
		
		Partitura nuevaPartitura = new Partitura(duracion);
		//se obtiene la cantidad de compaces del elemento xml
		int cantidadCompaces = element.getChildren().size();
		//se recorren todos esos compaces y se carga cada uno
		for (int i=0;i<cantidadCompaces;i++){
			Element elemenCompas = (Element)element.getChildren().get(i);
			Compas unCompas = Compas.cargarDesdeXML(elemenCompas, duracion);
			nuevaPartitura.agregarCompas(unCompas);
		}
		return nuevaPartitura;
	}
}
